package source_code_util

import (
	"regexp"
)

var _SourceCodeStartRegexp *regexp.Regexp
var _SourceCodeEndRegexp *regexp.Regexp

func init() {
	var err error

	_SourceCodeStartRegexp, err = regexp.Compile(`\/\*\s*SOURCE-CODE-START\s*\*\/`)
	if err != nil {
		panic(err)
	}

	_SourceCodeEndRegexp, err = regexp.Compile(`\/\*\s*SOURCE-CODE-END\s*\*\/`)
	if err != nil {
		panic(err)
	}
}

// 获取源代码
func GetSourceCode(content []byte) []byte {
	if len(content) == 0 {
		return content
	}

	startIndex := _GetSourceStartIndex(content)
	endIndex := _GetSourceEndIndex(content)

	if startIndex == 0 && len(content) == endIndex {
		return content
	}

	// 获取源代码
	sourceCode := content[startIndex:endIndex]

	return sourceCode
}

// 获取源代码开始的索引
func _GetSourceStartIndex(content []byte) int {
	if len(content) == 0 {
		return 0
	}

	loc := _SourceCodeStartRegexp.FindIndex(content)
	if loc == nil {
		return 0
	}

	return loc[1]
}

// 获取源代码结束的索引
func _GetSourceEndIndex(content []byte) int {
	if len(content) == 0 {
		return 0
	}

	loc := _SourceCodeEndRegexp.FindIndex(content)
	if loc == nil {
		return len(content)
	}

	return loc[0]
}
